# coding=utf-8
__author__ = 'Fonny'

from paramiko import RSAKey, PasswordRequiredException, SSHClient, AutoAddPolicy


def main():
	'''测试使用 paramiko 库,
	通过SSH方式连接远程主机并执行命令,
	然后打印命令执行结果.

	:return:
	:rtype:
	'''
	# 远程主机 url 或 IP
	hostname = '561dadc389f5cf27a5000091-fonny.rhcloud.com'
	# 远程主机用户名
	username = '561dadc389f5cf27a5000091'

	# 本地保存的私钥文件完整路径
	pk_path = 'e:\\Downloads\\_ssh_keys\\openshift\\_key_private_openssh'
	# 本地保存的公钥文件完整路径
	bk_path = 'e:\\Downloads\\_ssh_keys\\openshift\\_key_publick'

	# 尝试加载私钥
	try:
		key = RSAKey.from_private_key_file(pk_path)
	except PasswordRequiredException:
		# 私钥有密码的情况,让用户输入
		password = raw_input('RSA key pass word:')
		key = RSAKey.from_private_key_file(pk_path, password)

	# 使用 SSHClient 开始连接远程
	ssh = SSHClient()
	# 设置远程公钥处理方式
	ssh.set_missing_host_key_policy(AutoAddPolicy())
	ssh.load_system_host_keys(bk_path)
	# 开始连接
	ssh.connect(hostname=hostname, username=username, pkey=key)
	# 打印命令标准输出结果
	stdin, stdout, stderr = ssh.exec_command('ls /')
	print stdout.read()
	# 关闭连接
	ssh.close()


if __name__ == '__main__':
	main()
